package Model.Gates;

import Model.Main.Wire;
import java.util.logging.Level;

public class Inverter extends Gate {

    /**
     *konstruktor
     * 
     */
    public Inverter(String name) {
        this.name = name;
        maxInputs = 1;
        this.reset();
        logger.log(Level.CONFIG,this.getClass().getName()+" "+this.getName()+ " created with input(s) "+maxInputs+".");
                
        /**
         * Inicializáljuk az inputsWired listát.
         */
        initInputsWired();
    }

    /**
     * A bemenet értékének beállítása. A bemenet száma és az érték a paraméter.
     * Ezt hívja meg a wire. Ez fogja meghívni a wire sendvalue függvényét.
     * @param inputNumber Bemenet száma
     * @param val Bemenet értéke.
     * @return
     * 
     */
    @Override
    public void setInput(int inputNumber, Boolean val) throws Exception {
        // meghívjuk a superclassban lévő függvényt, ami az értéket, a stabilitást,
        // állítja be, és a loggolást végzi el.
        super.setInput(inputNumber, val);
        // itt ugyi csak a 0. lábra jöhet érték, aminek a negáltját tovább is küldjük
        this.val = !(val);
        logger.log(Level.FINEST, "{0} {1} has value {2} and sending out on wire {3}.",
                new Object[]{this.getClass().getName(), this.getName(), this.val, this.outputWire});
        // elküldöm az értéket
        outputWireSendValue();
    }
}
